home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Games of Daze
/
Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso
/
x2ftp
/
msdos
/
libs
/
ctask22d
/
tprt.c
< prev
next >
Wrap
C/C++ Source or Header
|
1990-10-12
|
3KB
|
130 lines
/*
Test program for checking CTask printer buffering.
The program will send the file given as parameter to the printer.
*/
#include <stdio.h>
#include <conio.h>
#include <process.h>
#include <ctype.h>
#include "tsk.h"
#include "prt.h"
#include "tsksup.h"
#define PORT 0x80 /* LPT1 (relative) */
#define POLL 0 /* Set to 1 to use polling */
#define STACKSIZE 2048
unsigned int _stklen = 3 * STACKSIZE; /* For Turbo C: Two tasks + main Task Stack */
tcb tcb1, tcb2;
flag halt, ready;
byte xmtbuf [1024];
int endrun;
int pport;
FILE *pfile;
void far task1 (void)
{
int i;
printf ("Task 1 started\n");
/* Copy file into printer pipe. Using a larger file buffer would be more
efficient, but this is only a demo.
*/
while (!endrun && ((i = getc (pfile)) != EOF))
prt_write (pport, (byte)i, 0L);
if (endrun)
return;
/* Wait for printer to complete output. */
if (!prt_complete (pport))
puts ("Waiting for Printer");
prt_wait_complete (pport, 0L);
/* Stop program */
set_flag (&halt);
set_flag (&ready);
}
/*
Second task just for fun. Echoes keyboard characters, aborts printing
when 'e' is entered. Also outputs snapshot dump on 'd'.
*/
void far task2 (void)
{
int ch;
printf ("Task 2 started\n");
while (!endrun)
{
ch = t_read_key () & 0xff;
putch (ch);
ch = tolower (ch);
endrun = (ch == 'e');
#if (TSK_NAMED)
if (ch == 'd')
snapshot (stdout);
#endif
}
set_flag (&halt);
}
void main (int argc, char **argv)
{
char stack1 [STACKSIZE];
char stack2 [STACKSIZE];
if ((pfile = fopen (argv [1], "rb")) == NULL)
{
printf ("Error opening file '%s'\n", argv [1]);
exit (1);
}
endrun = 0;
install_tasker (0, 0, IFL_STD, "TPRT");
pport = prt_install (PORT, POLL, PRI_STD, xmtbuf, sizeof (xmtbuf));
create_task (&tcb1, task1, stack1, STACKSIZE, PRI_STD, NULL TN("TASK1"));
create_task (&tcb2, task2, stack2, STACKSIZE, PRI_STD, NULL TN("TASK2"));
create_flag (&halt TN("Halt"));
create_flag (&ready TN("Ready"));
start_task (&tcb1);
start_task (&tcb2);
preempt_on ();
wait_flag_set (&halt, 0L);
endrun = 1;
puts ("******** Main Task *********");
wait_flag_set (&ready, 0L);
puts ("******** End Run *********");
preempt_off ();
prt_remove (pport);
remove_tasker ();
fclose (pfile);
}